import VNode from './VNode.js'

/**
 * c参数 三种形式 1 h('div', {}, text) 2 h('div', {}, []) 3 h('div', {}, h())
 * */
export default function h(sel, data, c){
    if (arguments.length !== 3) {
        throw Error('传入参数长度必须为3')
    }
    let children = []
    // 判断第一种 h('div', {}, text)
    // 判断c的数据类型  //sel, data, children, text, elm
    if(typeof c == 'number' || typeof c == 'string') {
        console.log(VNode(sel, data, undefined, c, undefined))
        return VNode(sel, data, undefined, c, undefined)
    }

    // 判断第二种h('div', {}, [])
    else if (Array.isArray(c)) {
        c.forEach((el,i) => {
            // 如果数组内不是数组抛出错误
            if(!(typeof(el) == 'object' && el.hasOwnProperty('sel'))) {
                throw Error('c的第' + (i + 1) + '不是h函数')
            } else {
                children.push(el)
            }
        })
        return VNode(sel,data,children,undefined,undefined)
    }

    // 判断第三种h('div', {}, h())
    else if (typeof c == 'object' && c.hasOwnProperty('sel')) {
        children = [c]
        return VNode(sel,data,children,undefined,undefined)
    }

    else {
        throw Error('传入的数据类型错误')
    }
}
